前言
前几天因为课程作业需要,使用基于python的Flask框架实现了一个简单的网页,好吧代码太丑就不贴了。那么问题来了,如何实现Flask框架下web程序的部署?
正文
很早就入手了一台腾讯云的服务器,一直空着没怎么用,这下终于派上用场了。而且学生价优惠只要1元哟。装载镜像Ubuntu Server 14.04.1 LTS 32位。个人采用的服务器登陆软件为putty,文件传输软件为FlashFXP。
我采用的部署方案是:
- Web 服务器采用 uwsgi host Flask
- 用 Supervisor 引用 uwsgi 作常规启动服务
- 基于 Nginx 作反向代理
步骤
通过 putty 远程登录服务器
|
|
安装 python 环境
接下来是python , Ubuntu 的默认环境已经预装 python 2.7 所以只需要安装 python 的 pip 安装工具即可。pip 用于安装一些基于python 应用的软件工具,在下文中将会频繁。一定要安装python-dev!!,都别问我在这上面坑了多久。
使用指令:ubuntu@ubuntu:~$ sudo apt-get install python-pip,python-dev
使用 virtualenv
- virtualenv 用来建立一个虚拟的python环境,一个专属于项目的python环境。用virtualenv 来保持一个干净的环境非常有用。
- pip 用来解决项目依赖问题。将项目所有依赖的第三方库写在一个requirements.txt 中用pip 批量安装。一般和virtualenv 配合使用,将所有包安装在virtualenv 的环境中。
Virtualenv 能够做到:
- 在没有权限的情况下安装新套件
- 不同应用可以使用不同的套件版本
- 套件升级不影响其他应用
安装:ubuntu@ubuntu:~$ sudo pip install virtualenv
安装后我们可以通过以下指令在当前目录下新建一个名为venv的虚拟环境:ubuntu@ubuntu:~/flask$ virtualenv venv
然后进入虚拟环境:ubuntu@ubuntu:~/flask$ source venv/bin/activate
(venv)ubuntu@ubuntu:~/flask$
然后只要看到指令最前端出现(venv) 就说明我们已经进入虚拟环境啦,可以用deactivate退出虚拟环境。
安装 Flask
可以使用清单一次安装requirements.txt,我这里只列出常用的包,个人根据需要自己装:
Flask==0.10.1
Flask-Login==0.2.11
Flask-Mail==0.9.1
Flask-SQLAlchemy==2.0
Flask-Script==2.0.5
Flask-WTF==0.10.2
然后使用命令一次安装:(venv)ubuntu@ubuntu:~/flask$ pip install -r requirements.txt
项目结构
│── flask
│ └── venv //虚拟目录
│ └── app //Flask 程序目录
│ ├── manage.py
│ ├── requirements.txt
│ ├── config.ini
安装 uWSGI
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
因为装过了pip工具,接下来就简单多了:(venv)ubuntu@ubuntu:~/flask$ pip install uwsgi
配置 uwsgi
好了重要部分来了,config.ini 是这样写的:
写好了以后可以这样执行:(venv)ubuntu@ubuntu:~/flask$ uwsgi config.ini
运行 uwsgi
OK, 此时已经正常启动 uwsgi 并将 Flask 项目载入其中了,ctrl+c 关闭程序。但这只是命令启动形式,要使其随同服务器启动并作为后台服务运行才是运营环境的实际所需要。因此接下来我们需要安装另一个工具来引导 uwsgi 。此时可以退出虚拟环境了。
安装 Supervisor
Supervisor可以同时启动多个应用,最重要的是,当某个应用Crash的时候,他可以自动重启该应用,保证可用性。ubuntu@ubuntu:~$ sudo apt-get install supervisor
Supervisor 的全局的配置文件位置在:/etc/supervisor/supervisor.conf
正常情况下我们并不需要去对其作出任何的改动,只需要添加一个新的 *.conf 文件放在/etc/supervisor/conf.d/
下就可以,那么我们就新建立一个用于启动 flask 项目的 uwsgi 的 supervisor 配置 (命名为:my_flask_supervisor.conf):
启动服务ubuntu@ubuntu:~$ sudo service supervisor start
终止服务ubuntu@ubuntu:~$ sudo service supervisor stop
安装 Nginx
Nginx是轻量级、性能强、占用资源少,能很好的处理高并发的反向代理软件
安装Nginxsudo apt-get install nginx
配置 Nginx
Ubuntu 上配置 Nginx 也是很简单,不要去改动默认的 nginx.conf 只需要将/etc/nginx/sites-available/default
文件替换掉就可以了
新建一个 default 文件:
server {
listen 80;
server_name XXX.XXX.XXX; #公网地址
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi 处理
uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; # 指向虚拟环境目录
uwsgi_param UWSGI_CHDIR /home/www/my_flask; # 指向网站根目录
uwsgi_param UWSGI_SCRIPT manage:app; # 指定启动程序
}
}
更改配置还需要记得重启一下nginx:ubuntu@ubuntu:~$ sudo service nginx restart
最后一步,启动uwsgi就大功告成啦(venv)my_flask root$ uwsgi config.ini
后记
一步一步来,遇到问题就google
再次重申记得装python-dev!!